<html>
  <head></head>
  <body>
    <p>实现一个forEach方法，可以遍历数组和对象</p>

    <script>
      Object.prototype.myForEach = function (callback) {
        if (typeof this !== 'object' || this === null) return false
        
        // 如果是数组
        if (this instanceof Array) {
          for(let index = 0; index <this.length; index++){
            callback(this[index],index)
          }
          return
        }

        // 如果是对象
        for (const key in this) {
          // hasOwnProperty表示是否有自己的属性。这个方法会查找一个对象是否有某个属性，但是不会去查找它的原型链。如果不用该方法判断，则会输出myForEach方法
          if (this.hasOwnProperty(key)) callback(this[key], key)
        }
      }

      var arr = [1, 2, 3, 4]
      arr.myForEach(function (item, index) {
        console.log('item:', item, 'index:', index)
      })

      var obj = { name: 'burc', age: 21 }
      obj.myForEach(function (item, key) {
        console.log('item:', item, 'key:', key)
      })
    </script>
  </body>
</html>
